﻿using System;
using System.Collections.Generic;   
using System.Web;
using System.Web.UI;
using Entities;
using Entities.Enumeraciones;
//using System.Web.UI.WebControls;
using DevExpress.Web.ASPxUploadControl;
using Helpers;
using System.Drawing;
using System.IO;
using System.Threading;

public partial class pNegocioAlta4 : System.Web.UI.Page
{
    const string UploadDirectory = "~/ImagenesSubidas/";
    const string ThumbnailFileName = "logoNegocio.jpg";

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            CargarListaPlanesServicio();
            lblError.Visible = false;
            if (Request["IDNegocio"] == null)
                Response.Redirect("pDefault.aspx");
        }
        if (ASPxCallbackPanel1.IsCallback)
        {
            // Intentionally pauses server-side processing, 
            // to demonstrate the Loading Panel functionality.
            Thread.Sleep(500);
        }
        string selectedValue = string.Empty;
        if (IsPostBack && listBoxPlanDeServicio.SelectedItem != null)
        {
            BuscarPlanSelecionado(long.Parse(listBoxPlanDeServicio.SelectedItem.Value.ToString()));
            
        }

    }

    private void BuscarPlanSelecionado(long IDPlan)
    {
        PlanServicio oPlan = PlanServicio.ObtenerUno(IDPlan);
        lblNombrePlan.Text = oPlan.NombrePlan;
        lblDescripcion.Text = oPlan.Descripcion;
        lblPrecioFinal0.Text  = CarcularPrecioPlan(int.Parse(listTipoServicio.SelectedItem.Value.ToString()),oPlan);
    }

    private string  CarcularPrecioPlan(int idTipoServicio, PlanServicio oPlan)
    {
        string strRetorno = string.Empty;
        decimal decPrecio;
        DateTime dFechaHasta = System.DateTime.Now;
        switch (idTipoServicio)
        {
            //Anual
            case 1:
                dFechaHasta = dFechaHasta.AddDays(365);
                decPrecio = oPlan.PrecioAnual;
                break;
            //Trimestral
            case 2:
                dFechaHasta = dFechaHasta.AddDays(90);
                decPrecio = (oPlan.PrecioAnual + oPlan.PrecioAnual * oPlan.ProcentajeIncrementoTrimestral) / 4;
                break;
            //Mensual
            case 3:
                dFechaHasta = dFechaHasta.AddDays(30);
                decPrecio = (oPlan.PrecioAnual + oPlan.PrecioAnual * oPlan.PorcentajeIncrementoMensual) / 12;
                break;
            default:
                decPrecio = oPlan.PrecioAnual;
                break;
        }
        lblTiempoHasta.Text = dFechaHasta.ToString();
        lblPrecioFinalOK.Text = Math.Round(decPrecio, 2).ToString();
        strRetorno = Math.Round(decPrecio,2).ToString()  + "$ (Incluye IVA)";
        return strRetorno;
    }

    protected void uplImage_FileUploadComplete(object sender, DevExpress.Web.ASPxUploadControl.FileUploadCompleteEventArgs e)
    {
        e.CallbackData = SavePostedFile(e.UploadedFile);
    }

    string SavePostedFile(UploadedFile uploadedFile)
    {
        if (!uploadedFile.IsValid)
            return string.Empty;
        string fileName = Path.Combine(MapPath(UploadDirectory), ThumbnailFileName);
        Image original = Image.FromStream(uploadedFile.FileContent);
        Image thumbnail = PhotoUtils.Inscribe(original, 200);
        PhotoUtils.SaveToJpeg(thumbnail, fileName);
        //Guarda la Imagen en la base de datos
        byte[] bytesLogo = PhotoUtils.Image2Bytes(thumbnail);
        long IdNegocio = long.Parse(Request["IDNegocio"]);
        Negocio.ModificarLogo(IdNegocio, bytesLogo);
        return ThumbnailFileName;
    }

    private void CargarListaPlanesServicio()
    {
        try
        {
            List<PlanServicio> listaPlanes = PlanServicio.ObtenerTodos();
            foreach (PlanServicio p in listaPlanes)
            {
                listBoxPlanDeServicio.Items.Add( new DevExpress.Web.ASPxEditors.ListEditItem(p.NombrePlan,p.IDPlanServicio));
            }
            listBoxPlanDeServicio.SelectedIndex = 0;
            BuscarPlanSelecionado(1);
        }
        catch (Exception ex)
        {
            lblError.Visible = true;
            lblError.Text = "Error al cargar la lista de planes, Descripción del error: " + ex.Message;
        }
    }

    protected void btnRegresar_Click(object sender, EventArgs e)
    {

    }
    protected void btnSiguiente_Click(object sender, EventArgs e)
    {
        try
        {
            if (!uplImage.IsValid)
            {
                lblError.Visible = true;
                lblError.Text = "Debe cargar una imágen para el logo de su negocio antes de continuar";
                return;
            }
            PlanServicio oPlan = PlanServicio.ObtenerUno(long.Parse(listBoxPlanDeServicio.SelectedItem.Value.ToString()));
            NegocioPlanDeServicio oNegocioPlan = new NegocioPlanDeServicio();
            Negocio oNegocio = Negocio.BuscarUno(long.Parse(Request["IDNegocio"]),false);
            oNegocio.NegocioEstado.IDNegocioEstado = 2; //Pendiente de apovacion
            Negocio.Modificar(oNegocio);
            oNegocioPlan.FechaDesde = System.DateTime.Now;
            oNegocioPlan.Negocio = oNegocio;
            oNegocioPlan.PlanDeServicio = oPlan;
            oNegocioPlan.Precio = decimal.Parse(lblPrecioFinalOK.Text);
            oNegocioPlan.FechaHasta = DateTime.Parse(lblTiempoHasta.Text);
            NegocioPlanDeServicio.Nuevo(oNegocioPlan);
            Response.Redirect("pNegocioAltaFin.aspx");
        }
        catch (Exception ex)
        {
            lblError.Text = "Error al intentar guardar el plan, Descripción del error: " + ex.Message;
        }
       

    }
}
